package com.zut.view;

import com.zut.entity.Course;
import com.zut.service.CourseService;
import com.zut.service.impl.CourseServiceImpl;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 课程操作界面类
 */
public class CourseView {
    private Scanner sc = new Scanner(System.in);

    //存放所有的课程id
    private List<Integer> cids ;

    //创建一个课程业务对象
    private CourseService cs = new CourseServiceImpl();


    public void courseMainPage(){

        while (true) {

            System.out.println("********************课程管理************************");
            System.out.println("请选择功能:1、添加课程 2、查询全部课程 3、模糊查询课程 4、修改课程名称 5、删除课程 0、退出课程管理");

            //接收用户输入的选项
            String num = sc.nextLine();

            switch (num){
                case "1":
                    addCoursePage();
                    break;

                case "2":
                    showCoursePage();
                    break;

                case "3":
                    showCourseLikeCnamePage();
                    break;

                case "4":
                    updateCourseNamePage();
                    break;

                case "5":
                    deleteCourseByIdPage();
                    break;

                case "0":
                    return;

                default:
                    System.out.println("功能暂未开放，请重新选择");
            }

        }

    }

    /**
     * 根据id删除课程
     */
    private void deleteCourseByIdPage() {
        System.out.println("***************删除课程*****************");
        showCoursePage();

        while (true){
            System.out.println("请输入课程编号:");
            String cid = sc.nextLine();

            //判断编号是否正确
            if(cids.contains(Integer.valueOf(cid))){

                //调用删除业务方法
                cs.deleteCourse(cid);
                System.out.println("删除成功");
                return;

            }else{
                System.out.println("课程不存在，请重新输入课程编号");
            }

        }

    }

    /**
     * 修改课程名称界面
     */
    private void updateCourseNamePage() {
        System.out.println("***************修改课程名称******************");

        //展示课程信息
        showCoursePage();

        while(true) {
            //开始选择课程
            System.out.println("请要修改的输入课程id:");
            String cid = sc.nextLine();

            //判断课程编号是否正确
            if (cids.contains(Integer.valueOf(cid))) {
                System.out.println("请输入新课程名称");
                String newcname = sc.nextLine();

                //调用业务方法进行修改
                boolean bl = cs.updateCourse(cid, newcname);

                System.out.println(bl ? "修改成功" : "课程已经存在");

                return;
            } else {
                System.out.println("课程编号不能正确，请重新输入");
            }

        }

    }

    /**
     * 模糊查询
     */
    private void showCourseLikeCnamePage() {
        System.out.println("*****************课程信息模糊查询***************");
        System.out.println("请输入课程名称:");
        String cname = sc.nextLine();

        //调用业务方法
        List<Course> list = cs.findCourseLikeCname(cname);

        //展示
        if(list.size()==0){
            System.out.println("查无此课程");
            return;
        }

        //以stream 流形式进行展示
        list.stream().forEach(t-> System.out.println("编号:"+t.getId()+"\t课程名称:"+t.getCname()));

    }

    /**
     * 展示所有课程
     */
    private void showCoursePage() {

        //清除旧内容
        cids = new ArrayList<>();

        System.out.println("所有课程如下:");

        //调用业务方法
        List<Course> list = cs.findAllCourse();

        //展示
        if(list.size()==0){
            System.out.println("暂未课程信息");
            return;
        }

        for (Course course : list) {
            System.out.println("课程编号:"+course.getId()+"\t课程名称:"+course.getCname());
            cids.add((Integer)course.getId());
        }

    }

    /**
     * 添加课程的界面
     */
    private void addCoursePage() {
        System.out.println("*********************课程添加********************");
        System.out.println("请输入课程名称:");
        String cname = sc.nextLine();
        //调用业务方法
        boolean bl = cs.addCourse(cname);
        //根据业务结果进行提示
        System.out.println(bl?"添加新课程成功":"课程已经存在");

    }

}
